﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Text;
using System.Xml;
using WLMCoreLibrary;
using MiWebSite_Core;
using System.Net;
using System.IO;

namespace MWS_AddDirectory.MisAnuncios
{
    public partial class Editar : System.Web.UI.Page
    {
        WebSiteMainConfiguration config = WebSiteMainConfiguration.GetConfig();
        dbConnector ConexionDB;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request["add"] != null)
                GuardarDatos();

            if (Request.QueryString["xml"] != null)
            {
                GetPageXML();
            }
            else
                TransformXML(GeneratePage());

        }

        private MiWebSitePage GeneratePage()
        {
            ConexionDB = new dbConnector(config.Connections[0].value);
            MiWebSitePage pagina = new MiWebSitePage();
            try
            {
                pagina = new MiWebSitePage(ref ConexionDB);
                pagina.Title = "Editar Mi Anuncio - Directorio de por aki " + DeCurrentDomain.Ciudad;
                pagina.DomainName = DeCurrentDomain.DomainName;
                pagina.DomainName = DeCurrentDomain.DomainName;
                pagina.DomainID = DeCurrentDomain.IdentificadorDominio;

                pagina.Scripts.Add("/jquery/libs/jquery.ajaxupload.js");
                pagina.Scripts.Add("/jquery/scripts/AdminAnuncios.js");
                pagina.Scripts.Add("/skin/directoriotizayuca/js/jquery.de.js");
                pagina.Scripts.Add("/jquery/libs/jquery.anythingslider.js");
                pagina.Scripts.Add("/jquery/libs/jquery.autoresize.js");
                pagina.Scripts.Add("/jquery/scripts/EditAnuncio.js");

                pagina.StyleSheets.Add("/skin/DirectorioTizayuca/css/addDetail.css");
                CargarDatosAnuncio(new Anuncio(Convert.ToInt32(Request["id"]), ref ConexionDB));
                XmlDocument xml = new XmlDocument();
                xml.LoadXml("<MiWebSiteContent><Contenido><![CDATA["+MiWebSiteFunctions.RenderControl(FormBusiness)+" ]]></Contenido></MiWebSiteContent>");
                pagina.Contenido = xml;
                //Response.Write(xml.InnerXml+"2222");

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            ConexionDB.CloseConnection();
            return pagina;
        }

        private void TransformXML(MiWebSitePage pagina)
        {
            List<ParametroTransformacionXML> parametros = FuncionesDirectorio.GetTransformationParameters();
            if (DeCurrentDomain.SubDomain != "www")
            {
                parametros.Add(new ParametroTransformacionXML("subDomainSystemName", new Categoria(DeCurrentDomain.SubDomain, true, ref ConexionDB).nombreCategoria));
            }
            string HTMLPagina = WLMFunctions.TransformXML(pagina, config.Settings["siteURL"].value + config.Settings["skinPath"].value + "index.xsl", parametros);
            Response.Write(HTMLPagina);
            Response.End();
        }

        private void GetPageXML()
        {
            Response.Clear();
            Response.ContentType = "text/xml";
            Response.HeaderEncoding = Encoding.UTF8;
            string xmlportada = WLMFunctions.SerializeObject(GeneratePage(), true);
            Response.Write(xmlportada);
            Response.End();
        }

        protected void CargarDatosAnuncio(Anuncio anuncio)
        {
            if (CurrentClient.Id != 0)
                if (anuncio.idCliente == CurrentClient.Id||anuncio.id<=0)
                {
                    if (!IsPostBack)
                    {
                        try
                        {
                            Nombre.Text = anuncio.nombre;
                            Email.Text = anuncio.email;
                            idAnuncioMostrado.Value = anuncio.id.ToString();
                            Direccion.Text = anuncio.direccion;
                            Colonia.Text = anuncio.colonia;
                            Estado.Text = anuncio.estado;
                            Municipio.Text = anuncio.municipio;
                            CP.Text = anuncio.CP;
                            Horario.Text = anuncio.horario;
                            Telefono.Text = anuncio.telefono;
                            WebSite.Text = anuncio.website;
                            Descripcion.Text = anuncio.descripcionMini;
                            Latitud.Value = anuncio.Latitud.ToString();
                            Longitud.Value = anuncio.Longitud.ToString();
                            Twitter.Text = anuncio.twitter;
                            Facebook.Text = anuncio.facebook;
                            //listaImagenes.Value=anuncio.Imagen.URLImagen;
                            idImagenAnuncio.Value = anuncio.idImagen.ToString();
                            NegocioPuntoMapa.Value = anuncio.Latitud.ToString() + "," + anuncio.Longitud.ToString();

                            int imageNum=0;
                            foreach (MiWebSiteMediaImages imagen in anuncio.Imagenes)
                            {
                                if ( imagen.id != anuncio.idImagen )
                                {

                                    if ( imageNum != 0 )
                                        imagenesAdicionales.Value += "|";
                                    imagenesAdicionales.Value += imagen.id.ToString();
                                    imageNum++;
                                }
                                if (listaImagenes.Value != "")
                                    listaImagenes.Value += '|' + imagen.URLImagen;
                                else
                                    listaImagenes.Value += imagen.URLImagen;

                            }
                            foreach (Categoria categoria in anuncio.Categorias)
                                dropCategorias.Items.Add(new ListItem(categoria.nombreCategoria, categoria.id.ToString()));
                            foreach (Tag tag in anuncio.Tags)
                                dropTags.Items.Add(new ListItem(tag.nombreTag, tag.id.ToString()));
                        }
                        catch
                        {
                            NegocioPuntoMapa.Value = DeCurrentDomain.MapPoint;
                        }
                    }
                }
                else
                {
                    Response.Redirect("/MisAnuncios");
                }
            else
                Response.Redirect("/MisAnuncios");

            
        }

        protected void actionButton_Click(object sender, EventArgs e)
        {

            GuardarDatos();
        }

        protected void GuardarDatos()
        {
            Response.ContentType = "text/xml";
            ConexionDB = new dbConnector(config.Connections["WebSite"].value);
            try
            {
                Anuncio anuncio;
                bool isNewAdd = false;
                if (idAnuncioMostrado.Value != "0")
                    anuncio = new Anuncio(Convert.ToInt32(idAnuncioMostrado.Value), ref ConexionDB);
                else
                {
                    isNewAdd = true;
                    anuncio = new Anuncio(ref ConexionDB);
                    anuncio.nombre = WLMFunctions.CleanQuery(Nombre.Text);
                    anuncio.URL = MiWebSiteFunctions.tituloaPostName(Nombre.Text.Trim());
                    anuncio.GUID = Guid.NewGuid();
                    Anuncio2dominio relacion = new Anuncio2dominio(ref ConexionDB);
                    relacion.idAnuncio = anuncio.id;
                    relacion.idDominio = DeCurrentDomain.IdentificadorDominio;
                    relacion.Save();
                    anuncio.idCliente = CurrentClient.Id;
                }
                anuncio.descripcionMini = WLMFunctions.CleanQuery(Descripcion.Text);
                anuncio.direccion = WLMFunctions.CleanQuery(Direccion.Text);
                anuncio.colonia = WLMFunctions.CleanQuery(Colonia.Text);
                anuncio.municipio = WLMFunctions.CleanQuery(Municipio.Text);
                anuncio.estado = WLMFunctions.CleanQuery(Estado.Text);
                anuncio.CP = WLMFunctions.CleanQuery(CP.Text);
                anuncio.horario = WLMFunctions.CleanQuery(Horario.Text);
                anuncio.telefono = WLMFunctions.CleanQuery(Telefono.Text);
                anuncio.twitter = WLMFunctions.CleanQuery(Twitter.Text);
                anuncio.facebook = WLMFunctions.CleanQuery(Facebook.Text);
                anuncio.email = WLMFunctions.CleanQuery(Email.Text);
                anuncio.website = WLMFunctions.CleanQuery(WebSite.Text);
                anuncio.ListaCategorias = Request["dropCategorias[]"];
                anuncio.ListaTags = Request["dropTags[]"];

                MiWebSiteMediaImages imagenInicial = new MiWebSiteMediaImages(Convert.ToInt32(idImagenAnuncio.Value), ref ConexionDB);
                anuncio.idImagen = imagenInicial.id;
                imagenInicial.idCategoria = 0;
                if (isNewAdd)
                {
                    if (anuncio.idTipoAnuncio == 1)
                    {
                        anuncio.idTipoAnuncio = 2;
                        anuncio.PagadoHasta = DateTime.Now.AddDays(15);
                    }
                    else
                        anuncio.PagadoHasta = DateTime.Now.AddYears(1);
                }
                imagenInicial.Save();
                try
                {
                    anuncio.Latitud = Convert.ToDouble(Latitud.Value);
                    anuncio.Longitud = Convert.ToDouble(Longitud.Value);
                    anuncio.mapa = NegocioPuntoMapa.Value;
                }
                catch (Exception ex) { }

                anuncio.Save(true);
                int x = 1;
                foreach (MiWebSiteMediaImages imgActuales in new MiWebSiteMediaImagesCollection(anuncio.id, ref ConexionDB).Elementos)
                {
                    imgActuales.idCategoria = 0;
                    imgActuales.aspecto = 0;
                    imgActuales.Save();
                }
                foreach (string idImgAdic in Request["imagenesAdicionales"].Split('|'))
                {
                    int idIMG = 0;
                    if (WLMFunctions.TryParseToInt(idImgAdic, out idIMG))
                    {
                        MiWebSiteMediaImages imagen = new MiWebSiteMediaImages(idIMG, ref ConexionDB);
                        imagen.idCategoria = anuncio.id;
                        imagen.aspecto = x;
                        imagen.Save();
                        x++;                      
                    }
                }
                //Publicando en Twitter
                if ( !HttpContext.Current.IsDebuggingEnabled )
                {
                    anuncio.PublicarEnTwitter();
                    if ( isNewAdd )
                        anuncio.EnviarNuevoPorMail();
                    else
                        anuncio.EnviarUpdatePorMail();
                }

                Response.Write(WLMFunctions.SerializeObject(new SuccessObject(isNewAdd ? SuccessCode.RegistrySaved : SuccessCode.RegistryUpdated, "", WLMFunctions.SerializeObject(anuncio)), true));
            }
            catch (Exception ex)
            {
                Response.Write(WLMFunctions.SerializeObject(new ErrorObject(ErrorCode.CompilationError,"",ex.Message,ex.StackTrace), true));
            }
            //Cerrando la Conexion
            ConexionDB.CloseConnection();
            Response.End();
        }
    }
}